﻿using Onshi.POS.AccesoDatos.Interfaces;
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Text;

namespace Onshi.POS.AccesoDatos
{
    public class ServicioDatosArticulos : ServicioDatosBase, IServicioDatosArticulos
    {
        #region Metodos

        public DataSet Articulos_DevolverTodos(Boolean incluirImagen)
        {
            try
            {
                var cm = new SqlCommand("Articulos_DevolverTodos", Conexion);
                cm.CommandType = CommandType.StoredProcedure;
                cm.Parameters.AddWithValue("@IncluirImagen", incluirImagen);
                var da = new SqlDataAdapter(cm);
                var ds = new DataSet();
                da.Fill(ds);
                return ds;
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (Conexion.State == ConnectionState.Open)
                    Conexion.Close();
            }
        }

        public DataSet Articulos_DevolverPorId(Int32 idArticulo, Boolean incluirImagen)
        {
            try
            {
                var cm = new SqlCommand("Articulos_DevolverPorId", Conexion);
                cm.CommandType = CommandType.StoredProcedure;
                cm.Parameters.AddWithValue("@IdArticulo", idArticulo);
                cm.Parameters.AddWithValue("@IncluirImagen", incluirImagen);
                var da = new SqlDataAdapter(cm);
                var ds = new DataSet();
                da.Fill(ds);
                return ds;
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (Conexion.State == ConnectionState.Open)
                    Conexion.Close();
            }
        }

        public DataSet Articulos_DevolverPorCodigo(String codigo, Boolean incluirImagen)
        {
            try
            {
                var cm = new SqlCommand("Articulos_DevolverPorCodigo", Conexion);
                cm.CommandType = CommandType.StoredProcedure;
                cm.Parameters.AddWithValue("@Codigo", codigo);
                cm.Parameters.AddWithValue("@IncluirImagen", incluirImagen);
                var da = new SqlDataAdapter(cm);
                var ds = new DataSet();
                da.Fill(ds);
                return ds;
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (Conexion.State == ConnectionState.Open)
                    Conexion.Close();
            }
        }

        public Int32 Articulos_Insertar(Byte idTipoArticulo, Int32 idSubRubroArticulo, Int32 idMarca, Int32 idDescuentoRecargoCantidad, Byte idTipoComisionArticulo, Byte idTipoImpuestoArticulo, Byte idTipoCostoArticulo, Int32 idDescuentoRecargoFechaHora, String codigo, String nombre, Int32 existenciaMinima, Int32 existenciaMaxima, Decimal costo, Decimal comision, Decimal comisionMaxima, Decimal iva, Decimal impuesto, String observaciones, Byte[] imagen, String codigoBarras)
        {
            try
            {
                var cm = new SqlCommand("Articulos_Insertar", Conexion);
                cm.CommandType = CommandType.StoredProcedure;
                cm.Parameters.AddWithValue("@IdTipoArticulo", idTipoArticulo);
                cm.Parameters.AddWithValue("@IdSubRubroArticulo", idSubRubroArticulo);
                cm.Parameters.AddWithValue("@IdMarca", idMarca);
                cm.Parameters.AddWithValue("@IdDescuentoRecargoCantidad", idDescuentoRecargoCantidad);
                cm.Parameters.AddWithValue("@IdTipoComisionArticulo", idTipoComisionArticulo);
                cm.Parameters.AddWithValue("@IdTipoImpuestoArticulo", idTipoImpuestoArticulo);
                cm.Parameters.AddWithValue("@IdTipoCostoArticulo", idTipoCostoArticulo);
                cm.Parameters.AddWithValue("@IdDescuentoRecargoFechaHora", idDescuentoRecargoFechaHora);
                cm.Parameters.AddWithValue("@Codigo", codigo);
                cm.Parameters.AddWithValue("@Nombre", nombre);
                cm.Parameters.AddWithValue("@ExistenciaMinima", existenciaMinima);
                cm.Parameters.AddWithValue("@ExistenciaMaxima", existenciaMaxima);
                cm.Parameters.AddWithValue("@Costo", costo);
                cm.Parameters.AddWithValue("@Comision", comision);
                cm.Parameters.AddWithValue("@ComisionMaxima", comisionMaxima);
                cm.Parameters.AddWithValue("@Iva", iva);
                cm.Parameters.AddWithValue("@Impuesto", impuesto);
                cm.Parameters.AddWithValue("@Observaciones", observaciones);
                cm.Parameters.AddWithValue("@Imagen", imagen);
                cm.Parameters.AddWithValue("@CodigoBarras", codigoBarras);
                cm.Connection.Open();
                return Convert.ToInt32(cm.ExecuteScalar());
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (Conexion.State == ConnectionState.Open)
                    Conexion.Close();
            }
        }

        public void Articulos_Modificar(Int32 idArticulo, Byte idTipoArticulo, Int32 idSubRubroArticulo, Int32 idMarca, Int32 idDescuentoRecargoCantidad, Byte idTipoComisionArticulo, Byte idTipoImpuestoArticulo, Byte idTipoCostoArticulo, Int32 idDescuentoRecargoFechaHora, String codigo, String nombre, Int32 existenciaMinima, Int32 existenciaMaxima, Decimal costo, Decimal comision, Decimal comisionMaxima, Decimal iva, Decimal impuesto, String observaciones, Byte[] imagen, Boolean estaEliminado, String codigoBarras)
        {
            try
            {
                var cm = new SqlCommand("Articulos_Modificar", Conexion);
                cm.CommandType = CommandType.StoredProcedure;
                cm.Parameters.AddWithValue("@IdArticulo", idArticulo);
                cm.Parameters.AddWithValue("@IdTipoArticulo", idTipoArticulo);
                cm.Parameters.AddWithValue("@IdSubRubroArticulo", idSubRubroArticulo);
                cm.Parameters.AddWithValue("@IdMarca", idMarca);
                cm.Parameters.AddWithValue("@IdDescuentoRecargoCantidad", idDescuentoRecargoCantidad);
                cm.Parameters.AddWithValue("@IdTipoComisionArticulo", idTipoComisionArticulo);
                cm.Parameters.AddWithValue("@IdTipoImpuestoArticulo", idTipoImpuestoArticulo);
                cm.Parameters.AddWithValue("@IdTipoCostoArticulo", idTipoCostoArticulo);
                cm.Parameters.AddWithValue("@IdDescuentoRecargoFechaHora", idDescuentoRecargoFechaHora);
                cm.Parameters.AddWithValue("@Codigo", codigo);
                cm.Parameters.AddWithValue("@Nombre", nombre);
                cm.Parameters.AddWithValue("@ExistenciaMinima", existenciaMinima);
                cm.Parameters.AddWithValue("@ExistenciaMaxima", existenciaMaxima);
                cm.Parameters.AddWithValue("@Costo", costo);
                cm.Parameters.AddWithValue("@Comision", comision);
                cm.Parameters.AddWithValue("@ComisionMaxima", comisionMaxima);
                cm.Parameters.AddWithValue("@Iva", iva);
                cm.Parameters.AddWithValue("@Impuesto", impuesto);
                cm.Parameters.AddWithValue("@Observaciones", observaciones);
                cm.Parameters.AddWithValue("@Imagen", imagen);
                cm.Parameters.AddWithValue("@EstaEliminado", estaEliminado);
                cm.Parameters.AddWithValue("@CodigoBarras", codigoBarras);
                cm.Connection.Open();
                cm.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (Conexion.State == ConnectionState.Open)
                    Conexion.Close();
            }
        }

        public void ArticulosCamposPersonalizadosArticulos_Insertar(Int32 idArticulo, Int32 idCampoPersonalizadoArticulo, String valor)
        {
            try
            {
                var cm = new SqlCommand("ArticulosCamposPersonalizadosArticulos_Insertar", Conexion);
                cm.CommandType = CommandType.StoredProcedure;
                cm.Parameters.AddWithValue("@IdArticulo", idArticulo);
                cm.Parameters.AddWithValue("@IdCampoPersonalizadoArticulo", idCampoPersonalizadoArticulo);
                cm.Parameters.AddWithValue("@Valor", valor);
                cm.Connection.Open();
                cm.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (Conexion.State == ConnectionState.Open)
                    Conexion.Close();
            }
        }

        public void ArticulosCamposPersonalizadosArticulos_EliminarPorArticulo(Int32 idArticulo)
        {
            try
            {
                var cm = new SqlCommand("ArticulosCamposPersonalizadosArticulos_EliminarPorArticulo", Conexion);
                cm.CommandType = CommandType.StoredProcedure;
                cm.Parameters.AddWithValue("@IdArticulo", idArticulo);
                cm.Connection.Open();
                cm.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (Conexion.State == ConnectionState.Open)
                    Conexion.Close();
            }
        }

        public void ArticulosListasPreciosCompras_Insertar(Int32 idArticulo, Int32 idListaPrecioCompra, Decimal valor)
        {
            try
            {
                var cm = new SqlCommand("ArticulosListasPreciosCompras_Insertar", Conexion);
                cm.CommandType = CommandType.StoredProcedure;
                cm.Parameters.AddWithValue("@IdArticulo", idArticulo);
                cm.Parameters.AddWithValue("@IdListaPrecioCompra", idListaPrecioCompra);
                cm.Parameters.AddWithValue("@Valor", valor);
                cm.Connection.Open();
                cm.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (Conexion.State == ConnectionState.Open)
                    Conexion.Close();
            }
        }

        public void ArticulosListasPreciosCompras_EliminarPorArticulo(Int32 idArticulo)
        {
            try
            {
                var cm = new SqlCommand("ArticulosListasPreciosCompras_EliminarPorArticulo", Conexion);
                cm.CommandType = CommandType.StoredProcedure;
                cm.Parameters.AddWithValue("@IdArticulo", idArticulo);
                cm.Connection.Open();
                cm.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (Conexion.State == ConnectionState.Open)
                    Conexion.Close();
            }
        }

        public void ArticulosListasPreciosVentas_Insertar(Int32 idArticulo, Int32 idListaPrecioVenta, Decimal valor)
        {
            try
            {
                var cm = new SqlCommand("ArticulosListasPreciosVentas_Insertar", Conexion);
                cm.CommandType = CommandType.StoredProcedure;
                cm.Parameters.AddWithValue("@IdArticulo", idArticulo);
                cm.Parameters.AddWithValue("@IdListaPrecioVenta", idListaPrecioVenta);
                cm.Parameters.AddWithValue("@Valor", valor);
                cm.Connection.Open();
                cm.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (Conexion.State == ConnectionState.Open)
                    Conexion.Close();
            }
        }

        public void ArticulosListasPreciosVentas_EliminarPorArticulo(Int32 idArticulo)
        {
            try
            {
                var cm = new SqlCommand("ArticulosListasPreciosVentas_EliminarPorArticulo", Conexion);
                cm.CommandType = CommandType.StoredProcedure;
                cm.Parameters.AddWithValue("@IdArticulo", idArticulo);
                cm.Connection.Open();
                cm.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (Conexion.State == ConnectionState.Open)
                    Conexion.Close();
            }
        }

        public Int32 ArticulosVariantes_Insertar(Int32 idArticulo, String nombre)
        {
            try
            {
                var cm = new SqlCommand("ArticulosVariantes_Insertar", Conexion);
                cm.CommandType = CommandType.StoredProcedure;
                cm.Parameters.AddWithValue("@IdArticulo", idArticulo);
                cm.Parameters.AddWithValue("@Nombre", nombre);
                cm.Connection.Open();
                return Convert.ToInt32(cm.ExecuteScalar());
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (Conexion.State == ConnectionState.Open)
                    Conexion.Close();
            }
        }

        public void ArticulosVariantes_EliminarPorArticulo(Int32 idArticulo)
        {
            try
            {
                var cm = new SqlCommand("ArticulosVariantes_EliminarPorArticulo", Conexion);
                cm.CommandType = CommandType.StoredProcedure;
                cm.Parameters.AddWithValue("@IdArticulo", idArticulo);
                cm.Connection.Open();
                cm.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (Conexion.State == ConnectionState.Open)
                    Conexion.Close();
            }
        }

        public Int32 ArticulosVariantesDetalles_Insertar(Int32 idArticuloVariante, String valor)
        {
            try
            {
                var cm = new SqlCommand("ArticulosVariantesDetalles_Insertar", Conexion);
                cm.CommandType = CommandType.StoredProcedure;
                cm.Parameters.AddWithValue("@IdArticuloVariante", idArticuloVariante);
                cm.Parameters.AddWithValue("@Valor", valor);
                cm.Connection.Open();
                return Convert.ToInt32(cm.ExecuteScalar());
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (Conexion.State == ConnectionState.Open)
                    Conexion.Close();
            }
        }

        public Int32 ArticulosExistencias_Insertar(Int32 idArticulo, Int32 idUbicacion, Int32 cantidad)
        {
            try
            {
                var cm = new SqlCommand("ArticulosExistencias_Insertar", Conexion);
                cm.CommandType = CommandType.StoredProcedure;
                cm.Parameters.AddWithValue("@IdArticulo", idArticulo);
                cm.Parameters.AddWithValue("@IdUbicacion", idUbicacion);
                cm.Parameters.AddWithValue("@Cantidad", cantidad);
                cm.Connection.Open();
                return Convert.ToInt32(cm.ExecuteScalar());
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (Conexion.State == ConnectionState.Open)
                    Conexion.Close();
            }
        }

        public void ArticulosExistencias_EliminarPorArticulo(Int32 idArticulo)
        {
            try
            {
                var cm = new SqlCommand("ArticulosExistencias_EliminarPorArticulo", Conexion);
                cm.CommandType = CommandType.StoredProcedure;
                cm.Parameters.AddWithValue("@IdArticulo", idArticulo);
                cm.Connection.Open();
                cm.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (Conexion.State == ConnectionState.Open)
                    Conexion.Close();
            }
        }

        public void ArticulosExistencias_EliminarPorUbicacion(Int32 idUbicacion)
        {
            try
            {
                var cm = new SqlCommand("ArticulosExistencias_EliminarPorUbicacion", Conexion);
                cm.CommandType = CommandType.StoredProcedure;
                cm.Parameters.AddWithValue("@IdUbicacion", idUbicacion);
                cm.Connection.Open();
                cm.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (Conexion.State == ConnectionState.Open)
                    Conexion.Close();
            }
        }

        public Int32 ArticulosExistenciasDetalles_Insertar(Int32 idArticuloExistencia, Int32 idArticuloVarianteDetalle)
        {
            try
            {
                var cm = new SqlCommand("ArticulosExistenciasDetalles_Insertar", Conexion);
                cm.CommandType = CommandType.StoredProcedure;
                cm.Parameters.AddWithValue("@IdArticuloExistencia", idArticuloExistencia);
                cm.Parameters.AddWithValue("@IdArticuloVarianteDetalle", idArticuloVarianteDetalle);
                cm.Connection.Open();
                return Convert.ToInt32(cm.ExecuteScalar());
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (Conexion.State == ConnectionState.Open)
                    Conexion.Close();
            }
        }

        public void ArticulosProveedores_Insertar(Int32 idArticulo, Int32 idProveedor)
        {
            try
            {
                var cm = new SqlCommand("ArticulosProveedores_Insertar", Conexion);
                cm.CommandType = CommandType.StoredProcedure;
                cm.Parameters.AddWithValue("@IdArticulo", idArticulo);
                cm.Parameters.AddWithValue("@IdProveedor", idProveedor);
                cm.Connection.Open();
                cm.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (Conexion.State == ConnectionState.Open)
                    Conexion.Close();
            }
        }

        public void ArticulosProveedores_EliminarPorArticulo(Int32 idArticulo)
        {
            try
            {
                var cm = new SqlCommand("ArticulosProveedores_EliminarPorArticulo", Conexion);
                cm.CommandType = CommandType.StoredProcedure;
                cm.Parameters.AddWithValue("@IdArticulo", idArticulo);
                cm.Connection.Open();
                cm.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (Conexion.State == ConnectionState.Open)
                    Conexion.Close();
            }
        }

        public Int32 ArticulosCompuestos_Insertar(Int32 idArticulo, Int32 idArticuloDetalle, Int32 cantidad)
        {
            try
            {
                var cm = new SqlCommand("ArticulosCompuestos_Insertar", Conexion);
                cm.CommandType = CommandType.StoredProcedure;
                cm.Parameters.AddWithValue("@IdArticulo", idArticulo);
                cm.Parameters.AddWithValue("@IdArticuloDetalle", idArticuloDetalle);
                cm.Parameters.AddWithValue("@Cantidad", cantidad);
                cm.Connection.Open();
                return Convert.ToInt32(cm.ExecuteScalar());
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (Conexion.State == ConnectionState.Open)
                    Conexion.Close();
            }
        }

        public void ArticulosCompuestos_EliminarPorArticulo(Int32 idArticulo)
        {
            try
            {
                var cm = new SqlCommand("ArticulosCompuestos_EliminarPorArticulo", Conexion);
                cm.CommandType = CommandType.StoredProcedure;
                cm.Parameters.AddWithValue("@IdArticulo", idArticulo);
                cm.Connection.Open();
                cm.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (Conexion.State == ConnectionState.Open)
                    Conexion.Close();
            }
        }

        public void Articulos_ModificarSubRubroArticulo(Int32 idSubRubroArticuloNuevo, Int32 idSubRubroArticuloViejo)
        {
            try
            {
                var cm = new SqlCommand("Articulos_ModificarSubRubroArticulo", Conexion);
                cm.CommandType = CommandType.StoredProcedure;
                cm.Parameters.AddWithValue("@IdSubRubroArticuloNuevo", idSubRubroArticuloNuevo);
                cm.Parameters.AddWithValue("@IdSubRubroArticuloViejo", idSubRubroArticuloViejo);
                cm.Connection.Open();
                cm.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (Conexion.State == ConnectionState.Open)
                    Conexion.Close();
            }
        }

        public void Articulos_ModificarMarca(Int32 idMarcaNuevo, Int32 idMarcaViejo)
        {
            try
            {
                var cm = new SqlCommand("Articulos_ModificarMarca", Conexion);
                cm.CommandType = CommandType.StoredProcedure;
                cm.Parameters.AddWithValue("@IdMarcaNuevo", idMarcaNuevo);
                cm.Parameters.AddWithValue("@IdMarcaViejo", idMarcaViejo);
                cm.Connection.Open();
                cm.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (Conexion.State == ConnectionState.Open)
                    Conexion.Close();
            }
        }

        public void Articulos_ModificarDescuentoRecargoFechaHora(Int32 idDescuentoRecargoFechaHoraNuevo, Int32 idDescuentoRecargoFechaHoraViejo)
        {
            try
            {
                var cm = new SqlCommand("Articulos_ModificarDescuentoRecargoFechaHora", Conexion);
                cm.CommandType = CommandType.StoredProcedure;
                cm.Parameters.AddWithValue("@IdDescuentoRecargoFechaHoraNuevo", idDescuentoRecargoFechaHoraNuevo);
                cm.Parameters.AddWithValue("@IdDescuentoRecargoFechaHoraViejo", idDescuentoRecargoFechaHoraViejo);
                cm.Connection.Open();
                cm.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (Conexion.State == ConnectionState.Open)
                    Conexion.Close();
            }
        }

        public void Articulos_ModificarDescuentoRecargoCantidad(Int32 idDescuentoRecargoCantidadNuevo, Int32 idDescuentoRecargoCantidadViejo)
        {
            try
            {
                var cm = new SqlCommand("Articulos_ModificarDescuentoRecargoCantidad", Conexion);
                cm.CommandType = CommandType.StoredProcedure;
                cm.Parameters.AddWithValue("@IdDescuentoRecargoCantidadNuevo", idDescuentoRecargoCantidadNuevo);
                cm.Parameters.AddWithValue("@IdDescuentoRecargoCantidadViejo", idDescuentoRecargoCantidadViejo);
                cm.Connection.Open();
                cm.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (Conexion.State == ConnectionState.Open)
                    Conexion.Close();
            }
        }

        public void ArticulosCamposPersonalizadosArticulos_EliminarPorCampoPersonalizadoArticulo(Int32 idCampoPersonalizadoArticulo)
        {
            try
            {
                var cm = new SqlCommand("ArticulosCamposPersonalizadosArticulos_EliminarPorCampoPersonalizadoArticulo", Conexion);
                cm.CommandType = CommandType.StoredProcedure;
                cm.Parameters.AddWithValue("@IdCampoPersonalizadoArticulo", idCampoPersonalizadoArticulo);
                cm.Connection.Open();
                cm.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (Conexion.State == ConnectionState.Open)
                    Conexion.Close();
            }
        }

        public void ArticulosListasPreciosCompras_EliminarPorListaPrecioCompra(Int32 idListaPrecioCompra)
        {
            try
            {
                var cm = new SqlCommand("ArticulosListasPreciosCompras_EliminarPorListaPrecioCompra", Conexion);
                cm.CommandType = CommandType.StoredProcedure;
                cm.Parameters.AddWithValue("@IdListaPrecioCompra", idListaPrecioCompra);
                cm.Connection.Open();
                cm.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (Conexion.State == ConnectionState.Open)
                    Conexion.Close();
            }
        }

        public void ArticulosListasPreciosVentas_EliminarPorListaPrecioVenta(Int32 idListaPrecioVenta)
        {
            try
            {
                var cm = new SqlCommand("ArticulosListasPreciosVentas_EliminarPorListaPrecioVenta", Conexion);
                cm.CommandType = CommandType.StoredProcedure;
                cm.Parameters.AddWithValue("@IdListaPrecioVenta", idListaPrecioVenta);
                cm.Connection.Open();
                cm.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (Conexion.State == ConnectionState.Open)
                    Conexion.Close();
            }
        }

        #endregion
    }
}
